<?php

require_once 'UE/Cache/Abstract.php';

/**
 * 缓存Sea Memchche实现
 * 
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * @author cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */
class UE_Cache_Sea extends UE_Cache_Abstract {
	protected static $_mmc = null;
	protected static $_preLen = 0;

	public function __construct() {
		if(!self::$_mmc) {
			self::$_mmc = memcache_init();
		}
	}


	/**
	 * 读缓存变量
	 *
	 * @param string $key 缓存下标
	 * @return array
	 */
    public function fetch($key) {
		$value = memcache_get(self::$_mmc, $key);

		if($value) {
			$value = unserialize($value);
		}

		return $value;
	}
	
	/**
	 * 缓存变量
	 *
	 * @param string $key 缓存变量下标
	 * @param array $value 缓存变量的值
	 * @return bool
	 */
    public function store($key, $value) {
		if($value) {
			$value = serialize($value);
		}

		return memcache_set(self::$_mmc, $key, $value);
	}
	
	/**
	 * 删除缓存变量
	 *
	 * @param string $key 缓存下标
	 * @return UE_Cache_Abstract
	 */
    public function delete($key) {
	    memcache_delete(self::$_mmc, $key);
	}
	
	/**
	 * 清(删)除所有缓存
	 *
	 * @param string $dir 某个目录
	 * @return UE_Cache_Abstract
	 */
    public function clear($dir = '') {
		//if($dir) {
		//}

		memcache_flush(self::$_mmc);
	}
	
	/**
	 * 锁定缓存变量
	 *
	 * @param string $key 缓存下标
	 * @return UE_Cache_Abstract
	 */
    public function lock($key) {
		return memcache_set(self::$_mmc, $key.'.lock', 1);
	}

	/**
	 * 缓存变量解锁
	 *
	 * @param string $key 缓存下标
	 * @return UE_Cache_Abstract
	 */
    public function unlock($key) {
		return memcache_delete(self::$_mmc, $key.'.lock');
	}

	/**
	 * 取得缓存变量是否被锁定
	 *
	 * @param string $key 缓存下标
	 * @return bool
	 */
    public function isLocked($key) {
		return memcache_get(self::$_mmc, $key.'.lock');
	}
}